import { sysLogin, sysProfile, sysUser } from '@/api/user'
import { getToken, setToken, removeToken } from '@/utils/auth.js'
import { resetRouter } from '@/router'
import CookieJs from 'js-cookie'
// 在页面刷新时state中的token初始化时也有值
/*
localStorage
localStorage.setItem(key,value)
localStorage.getItem(key)
localStorage.removeItem(key)
cookie:js-cookie插件（做cookie处理最出名的）
*/

const state = {
  token: getToken() || '',
  userInfo: ''
}
const mutations = {
  setToken (state, value) {
    setToken(value)
    // 存储token的同时存储当前时间戳
    CookieJs.set('startTime', Date.now())
    state.token = value
  },
  setUserInfo (state, value) {
    state.userInfo = value
  },
  // removeToken (state) {
  //   state.token = ''
  //   removeToken()
  // },
  // removeUserInfo (state) {
  //   state.userInfo = ''
  // },
  // 退出登陆
  logout (state) {
    state.token = ''
    state.userInfo = ''
    removeToken()
    // 重置路由配制(只能使用静态路由)
    resetRouter()
  }
}
const actions = {
  // 定义调用登陆接口获取token
  async getUserToken (store, value) {
    // 这里只是针对 理想情况处理了，并没有处理意外情况

    const res = await sysLogin(value)
    // window.console.log(2)
    // res.data.data
    // 可以在响应拦截器统一去掉这二层，第一层data是axios包装的，第二层data是后端接口包装的，
    store.commit('setToken', res)
    window.console.log('获取token:', res)
  },
  // 获取用户信息actions方法
  async refreshUserInfo ({ commit }) {
    const res = await sysProfile()
    const res2 = await sysUser(res.userId)
    // 返回值=Object.assign({},res,res2,....)  第一个对象是接收后面数据的值的，后面所有对象的值最终都会添加到第一个里面去
    // 返回值={...res,...res2}
    // window.console.log(Object.assign({}, res, res2))
    // window.console.log(res, res2)
    commit('setUserInfo', { ...res, ...res2 })
    // window.console.log('用户信息:', res)
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
/*
用户信息获取与渲染
1：在vuex中完成相应参数与方法定义
2：定义调用接口api
3:在actions里调用获取用户信息接口获取当前登陆人用户信息
4：在合适的位置调用actions方法完成用户信息获取
5：渲染用户信息
问题
   1：token只是针对 获取用户信息接口添加的，没有在拦截器添加
   2：用户信息接口调用时报了401错误
*/
